@strapi/admin 4.0.0 → 4.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (348) hide show
  1. package/admin/src/components/LeftMenu/index.js +13 -5
  2. package/admin/src/components/Notifications/Notification/index.js +3 -3
  3. package/admin/src/content-manager/components/CollectionTypeFormWrapper/index.js +2 -2
  4. package/admin/src/content-manager/components/ComponentInitializer/index.js +4 -9
  5. package/admin/src/content-manager/components/DragLayer/index.js +1 -1
  6. package/admin/src/content-manager/components/DynamicTable/CellContent/CellValue.js +12 -2
  7. package/admin/src/content-manager/components/DynamicTable/CellContent/utils/getNumberOfDecimals.js +8 -0
  8. package/admin/src/content-manager/components/DynamicTable/index.js +7 -0
  9. package/admin/src/content-manager/components/DynamicZone/components/DzLabel/index.js +24 -7
  10. package/admin/src/content-manager/components/DynamicZone/index.js +31 -15
  11. package/admin/src/content-manager/components/EditViewDataManagerProvider/utils/schema.js +4 -1
  12. package/admin/src/content-manager/components/InputUID/index.js +4 -0
  13. package/admin/src/content-manager/components/PreviewWysiwyg/Wrapper.js +4 -0
  14. package/admin/src/content-manager/components/RepeatableComponent/AccordionGroupCustom/index.js +1 -3
  15. package/admin/src/content-manager/components/RepeatableComponent/DraggedItem/IconButtonCustoms.js +0 -4
  16. package/admin/src/content-manager/components/RepeatableComponent/DraggedItem/index.js +36 -14
  17. package/admin/src/content-manager/components/RepeatableComponent/index.js +2 -2
  18. package/admin/src/content-manager/components/SelectWrapper/index.js +15 -81
  19. package/admin/src/content-manager/components/Wysiwyg/Editor.js +2 -3
  20. package/admin/src/content-manager/components/Wysiwyg/EditorLayout.js +2 -0
  21. package/admin/src/content-manager/components/Wysiwyg/WysiwygFooter.js +2 -4
  22. package/admin/src/content-manager/components/Wysiwyg/WysiwygNav.js +67 -62
  23. package/admin/src/content-manager/components/Wysiwyg/index.js +13 -4
  24. package/admin/src/content-manager/hooks/useFetchContentTypeLayout/utils/formatLayouts.js +2 -2
  25. package/admin/src/content-manager/pages/App/LeftMenu/index.js +5 -7
  26. package/admin/src/content-manager/pages/App/index.js +12 -4
  27. package/admin/src/content-manager/pages/EditSettingsView/components/DisplayedFieldButton.js +1 -1
  28. package/admin/src/content-manager/pages/EditSettingsView/components/FieldButtonContent.js +1 -1
  29. package/admin/src/content-manager/pages/EditSettingsView/components/RelationalFieldButton.js +1 -1
  30. package/admin/src/content-manager/pages/EditSettingsView/index.js +1 -1
  31. package/admin/src/content-manager/pages/EditView/Informations/index.js +37 -13
  32. package/admin/src/content-manager/pages/ListSettingsView/components/CardPreview.js +19 -8
  33. package/admin/src/content-manager/pages/ListSettingsView/components/DraggableCard.js +124 -67
  34. package/admin/src/content-manager/pages/ListSettingsView/components/SortDisplayedFields.js +4 -1
  35. package/admin/src/content-manager/pages/ListSettingsView/index.js +1 -1
  36. package/admin/src/content-manager/pages/ListView/index.js +37 -20
  37. package/admin/src/hooks/useSettingsMenu/utils/defaultGlobalLinks.js +1 -1
  38. package/admin/src/pages/App/utils/unique-identifier.js +3 -1
  39. package/admin/src/pages/AuthPage/components/Register/index.js +4 -1
  40. package/admin/src/pages/AuthPage/index.js +8 -2
  41. package/admin/src/pages/AuthPage/utils/forms.js +2 -0
  42. package/admin/src/pages/ProfilePage/index.js +34 -6
  43. package/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/index.js +3 -2
  44. package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/index.js +20 -7
  45. package/admin/src/pages/SettingsPage/pages/Roles/EditPage/index.js +1 -1
  46. package/admin/src/pages/SettingsPage/pages/Users/EditPage/index.js +3 -3
  47. package/admin/src/pages/SettingsPage/pages/Users/EditPage/utils/layout.js +2 -0
  48. package/admin/src/pages/SettingsPage/pages/Users/ListPage/ModalForm/index.js +3 -3
  49. package/admin/src/pages/SettingsPage/pages/Users/ListPage/ModalForm/utils/layout.js +2 -0
  50. package/admin/src/pages/SettingsPage/pages/Users/ListPage/ModalForm/utils/stepper.js +1 -1
  51. package/admin/src/pages/SettingsPage/pages/Users/ListPage/index.js +5 -11
  52. package/admin/src/pages/SettingsPage/pages/Users/ListPage/utils/tableHeaders.js +1 -1
  53. package/admin/src/pages/SettingsPage/pages/Users/components/MagicLink/index.js +1 -1
  54. package/admin/src/pages/SettingsPage/pages/Users/components/SelectRoles/index.js +2 -1
  55. package/admin/src/pages/SettingsPage/pages/Webhooks/EditView/components/EventInput/index.js +1 -1
  56. package/admin/src/pages/SettingsPage/pages/Webhooks/EditView/components/HeadersInput/index.js +1 -1
  57. package/admin/src/pages/SettingsPage/pages/Webhooks/EditView/components/WebhookForm/index.js +3 -1
  58. package/admin/src/pages/SettingsPage/pages/Webhooks/ListView/index.js +5 -5
  59. package/admin/src/translations/en.json +32 -23
  60. package/admin/src/translations/fr.json +315 -6
  61. package/admin/src/translations/ko.json +670 -263
  62. package/admin/src/translations/nl.json +1 -1
  63. package/admin/src/translations/zh-Hans.json +554 -204
  64. package/admin/src/translations/zh.json +482 -41
  65. package/build/{01a600d9e6e0dea21e33017a97bdf431.png → 01a600d9e6e0dea21e33.png} +0 -0
  66. package/build/{15026a3d58aeb282813457f060f2d6ac.png → 15026a3d58aeb2828134.png} +0 -0
  67. package/build/{1551f4f60c37af51121f106501f69b80.woff2 → 1551f4f60c37af51121f.woff2} +0 -0
  68. package/build/{1e59d2330b4c6deb84b340635ed36249.ttf → 1e59d2330b4c6deb84b3.ttf} +0 -0
  69. package/build/{20fd1704ea223900efa9fd4e869efb08.woff2 → 20fd1704ea223900efa9.woff2} +0 -0
  70. package/build/{2285773e6b4b172f07d9b777c81b0775.woff → 2285773e6b4b172f07d9.woff} +0 -0
  71. package/build/{23f19bb08961f37aaf692ff943823453.eot → 23f19bb08961f37aaf69.eot} +0 -0
  72. package/build/{2a9e9ef5c4c775bb7c7b3625041b1354.png → 2a9e9ef5c4c775bb7c7b.png} +0 -0
  73. package/build/{2f517e09eb2ca6650ff5bec5a95157ab.svg → 2f517e09eb2ca6650ff5.svg} +0 -0
  74. package/build/3742.2281afd7.chunk.js +1 -0
  75. package/build/4045.0b43d55e.chunk.js +1 -0
  76. package/build/4261.061aed35.chunk.js +1 -0
  77. package/build/4672.7ad6782a.chunk.js +1 -0
  78. package/build/{4689f52cc96215721344e51e5831eec1.svg → 4689f52cc96215721344.svg} +0 -0
  79. package/build/{4715.35096dd7.chunk.js → 4715.f134f37a.chunk.js} +1 -1
  80. package/build/{491974d108fe4002b2aaf7ffc48249a0.ttf → 491974d108fe4002b2aa.ttf} +0 -0
  81. package/build/{527940b104eb2ea366c8630f3f038603.ttf → 527940b104eb2ea366c8.ttf} +0 -0
  82. package/build/6060.3af8877e.chunk.js +2 -0
  83. package/build/{3226.0dc582b2.chunk.js.LICENSE.txt → 6060.3af8877e.chunk.js.LICENSE.txt} +1 -1
  84. package/build/{6250.11ba8b50.chunk.js → 6250.7b4872b1.chunk.js} +1 -1
  85. package/build/{5881.deb18c91.chunk.js → 6354.48168bc8.chunk.js} +2 -2
  86. package/build/{5881.deb18c91.chunk.js.LICENSE.txt → 6354.48168bc8.chunk.js.LICENSE.txt} +0 -0
  87. package/build/{77206a6bb316fa0aded5083cc57f92b9.eot → 77206a6bb316fa0aded5.eot} +0 -0
  88. package/build/{7a3337626410ca2f40718481c755640f.woff2 → 7a3337626410ca2f4071.woff2} +0 -0
  89. package/build/{7a8b4f130182d19a2d7c67d80c090397.svg → 7a8b4f130182d19a2d7c.svg} +0 -0
  90. package/build/8530.a978bde6.chunk.js +2 -0
  91. package/build/8530.a978bde6.chunk.js.LICENSE.txt +7 -0
  92. package/build/{8b43027f47b20503057dfbbaa9401fef.eot → 8b43027f47b20503057d.eot} +0 -0
  93. package/build/{9bbb245e67a133f6e486d8d2545e14a5.eot → 9bbb245e67a133f6e486.eot} +0 -0
  94. package/build/Admin-authenticatedApp.8c375af0.chunk.js +1 -0
  95. package/build/{Admin_homePage.31e37124.chunk.js → Admin_homePage.f9cdd615.chunk.js} +1 -1
  96. package/build/Admin_marketplace.4f6c77f2.chunk.js +1 -0
  97. package/build/Admin_pluginsPage.cd9a871c.chunk.js +1 -0
  98. package/build/Admin_profilePage.077e17a5.chunk.js +1 -0
  99. package/build/Admin_settingsPage.9752ef85.chunk.js +1 -0
  100. package/build/admin-edit-roles-page.27b047fc.chunk.js +1 -0
  101. package/build/admin-edit-users.a0dede23.chunk.js +1 -0
  102. package/build/admin-users.a11177c1.chunk.js +1 -0
  103. package/build/{api-tokens-create-page.ac4285ba.chunk.js → api-tokens-create-page.07be3e07.chunk.js} +1 -1
  104. package/build/{api-tokens-edit-page.b8900ddd.chunk.js → api-tokens-edit-page.d6afc60e.chunk.js} +1 -1
  105. package/build/api-tokens-list-page.da9714d8.chunk.js +1 -0
  106. package/build/{ar-json.9805489e.chunk.js → ar-json.d79e4709.chunk.js} +1 -1
  107. package/build/{b997a22a2e0b87ef1fa23258f14f3b27.ico → b997a22a2e0b87ef1fa2.ico} +0 -0
  108. package/build/{bb58e57c48a3e911f15fa834ff00d44a.woff → bb58e57c48a3e911f15f.woff} +0 -0
  109. package/build/{bd81ba6c07827282255d031b2a6f4fe4.png → bd81ba6c07827282255d.png} +0 -0
  110. package/build/{be9ee23c0c6390141475d519c2c5fb8f.ttf → be9ee23c0c6390141475.ttf} +0 -0
  111. package/build/{c1e38fd9e0e74ba58f7a2b77ef29fdd3.svg → c1e38fd9e0e74ba58f7a.svg} +0 -0
  112. package/build/{c3de6118ef47086ad05c83a1c78f006d.png → c3de6118ef47086ad05c.png} +0 -0
  113. package/build/codemirror-css.f9701755.chunk.js +1 -0
  114. package/build/codemirror-theme.1563c1c2.chunk.js +1 -0
  115. package/build/content-manager.51651b3b.chunk.js +1 -0
  116. package/build/{content-type-builder-translation-ar-json.bce4d624.chunk.js → content-type-builder-translation-ar-json.f1fedc12.chunk.js} +1 -1
  117. package/build/{content-type-builder-translation-cs-json.785866b6.chunk.js → content-type-builder-translation-cs-json.2f7e2289.chunk.js} +1 -1
  118. package/build/{content-type-builder-translation-de-json.6faa019a.chunk.js → content-type-builder-translation-de-json.46017754.chunk.js} +1 -1
  119. package/build/content-type-builder-translation-dk-json.5c6344f9.chunk.js +1 -0
  120. package/build/{content-type-builder-translation-en-json.d860718a.chunk.js → content-type-builder-translation-en-json.d70fc3af.chunk.js} +1 -1
  121. package/build/{content-type-builder-translation-es-json.5a4f519b.chunk.js → content-type-builder-translation-es-json.7e2055ad.chunk.js} +1 -1
  122. package/build/{content-type-builder-translation-fr-json.2156f48c.chunk.js → content-type-builder-translation-fr-json.8f66eb66.chunk.js} +1 -1
  123. package/build/content-type-builder-translation-id-json.aab2f426.chunk.js +1 -0
  124. package/build/{content-type-builder-translation-it-json.dc154c62.chunk.js → content-type-builder-translation-it-json.4c91e895.chunk.js} +1 -1
  125. package/build/{content-type-builder-translation-ja-json.9f8695a0.chunk.js → content-type-builder-translation-ja-json.c239ba90.chunk.js} +1 -1
  126. package/build/content-type-builder-translation-ko-json.2a5e0769.chunk.js +1 -0
  127. package/build/{content-type-builder-translation-ms-json.cfc21fb6.chunk.js → content-type-builder-translation-ms-json.124be88c.chunk.js} +1 -1
  128. package/build/{content-type-builder-translation-nl-json.4d742025.chunk.js → content-type-builder-translation-nl-json.98a240b8.chunk.js} +1 -1
  129. package/build/{content-type-builder-translation-pl-json.1b701a76.chunk.js → content-type-builder-translation-pl-json.2abc61bd.chunk.js} +1 -1
  130. package/build/{content-type-builder-translation-pt-BR-json.2c514ada.chunk.js → content-type-builder-translation-pt-BR-json.c0415545.chunk.js} +1 -1
  131. package/build/{content-type-builder-translation-pt-json.a3c4315c.chunk.js → content-type-builder-translation-pt-json.ab3e086d.chunk.js} +1 -1
  132. package/build/{content-type-builder-translation-ru-json.72173619.chunk.js → content-type-builder-translation-ru-json.1a6779fd.chunk.js} +1 -1
  133. package/build/{content-type-builder-translation-sk-json.e654be3b.chunk.js → content-type-builder-translation-sk-json.5c82f020.chunk.js} +1 -1
  134. package/build/{content-type-builder-translation-th-json.403aa6a4.chunk.js → content-type-builder-translation-th-json.24ee19eb.chunk.js} +1 -1
  135. package/build/{content-type-builder-translation-tr-json.72027971.chunk.js → content-type-builder-translation-tr-json.30434835.chunk.js} +1 -1
  136. package/build/{content-type-builder-translation-uk-json.a1b9f71b.chunk.js → content-type-builder-translation-uk-json.771662ef.chunk.js} +1 -1
  137. package/build/{content-type-builder-translation-zh-Hans-json.4c242866.chunk.js → content-type-builder-translation-zh-Hans-json.070020ae.chunk.js} +1 -1
  138. package/build/{content-type-builder-translation-zh-json.3b3eb4e8.chunk.js → content-type-builder-translation-zh-json.9708310d.chunk.js} +1 -1
  139. package/build/content-type-builder.c815d0c6.chunk.js +1 -0
  140. package/build/cropper-css.45c47fe3.chunk.js +1 -0
  141. package/build/{cs-json.ff08076e.chunk.js → cs-json.b8ba75b8.chunk.js} +1 -1
  142. package/build/{d878b0a6a1144760244ff0665888404c.woff2 → d878b0a6a1144760244f.woff2} +0 -0
  143. package/build/de-json.e01bdeae.chunk.js +1 -0
  144. package/build/dk-json.9516eb08.chunk.js +1 -0
  145. package/build/{eeccf4f66002c6f2ba24d3d22f2434c2.woff → eeccf4f66002c6f2ba24.woff} +0 -0
  146. package/build/email-settings-page.03e18bb2.chunk.js +1 -0
  147. package/build/email-translation-ar-json.95d90eb4.chunk.js +1 -0
  148. package/build/email-translation-cs-json.dfd1f3f2.chunk.js +1 -0
  149. package/build/email-translation-de-json.559a7d5f.chunk.js +1 -0
  150. package/build/email-translation-dk-json.e1480892.chunk.js +1 -0
  151. package/build/email-translation-en-json.fa0dc92b.chunk.js +1 -0
  152. package/build/email-translation-es-json.abbba8e3.chunk.js +1 -0
  153. package/build/email-translation-fr-json.49c3c888.chunk.js +1 -0
  154. package/build/email-translation-id-json.e3c2101d.chunk.js +1 -0
  155. package/build/email-translation-it-json.3de61cb6.chunk.js +1 -0
  156. package/build/email-translation-ja-json.66337e44.chunk.js +1 -0
  157. package/build/email-translation-ko-json.52bbd7b4.chunk.js +1 -0
  158. package/build/email-translation-ms-json.e39256df.chunk.js +1 -0
  159. package/build/email-translation-nl-json.12d28adb.chunk.js +1 -0
  160. package/build/email-translation-pl-json.9585a84e.chunk.js +1 -0
  161. package/build/email-translation-pt-BR-json.6c04b3ef.chunk.js +1 -0
  162. package/build/email-translation-pt-json.0239be04.chunk.js +1 -0
  163. package/build/email-translation-ru-json.f3b4fecc.chunk.js +1 -0
  164. package/build/email-translation-sk-json.76dbaaa6.chunk.js +1 -0
  165. package/build/email-translation-th-json.25ad73e7.chunk.js +1 -0
  166. package/build/email-translation-tr-json.ae04a9f2.chunk.js +1 -0
  167. package/build/email-translation-uk-json.03b27b08.chunk.js +1 -0
  168. package/build/email-translation-vi-json.3e1dd5b3.chunk.js +1 -0
  169. package/build/email-translation-zh-Hans-json.0df4ca59.chunk.js +1 -0
  170. package/build/email-translation-zh-json.82978eb0.chunk.js +1 -0
  171. package/build/en-json.9e3c8615.chunk.js +1 -0
  172. package/build/{es-json.060b658c.chunk.js → es-json.fa8ddd1d.chunk.js} +1 -1
  173. package/build/{f691f37e57f04c152e2315ab7dbad881.woff → f691f37e57f04c152e23.woff} +0 -0
  174. package/build/{fde9b1ad0670d29a251605a5e8eef02b.png → fde9b1ad0670d29a2516.png} +0 -0
  175. package/build/fontawesome-css-all.9c41f1d7.chunk.js +1 -0
  176. package/build/fontawesome-css.24c8dbfc.chunk.js +1 -0
  177. package/build/fr-json.bae03a2c.chunk.js +1 -0
  178. package/build/{he-json.fafa8569.chunk.js → he-json.86f9e663.chunk.js} +1 -1
  179. package/build/highlight.js.90b600ee.chunk.js +1 -0
  180. package/build/i18n-settings-page.89d1776c.chunk.js +1 -0
  181. package/build/i18n-translation-en-json.239b740f.chunk.js +1 -0
  182. package/build/i18n-translation-fr-json.b52474fc.chunk.js +1 -0
  183. package/build/i18n-translation-ko-json.e88e11ef.chunk.js +1 -0
  184. package/build/{i18n-translation-zh-Hans-json.670b4940.chunk.js → i18n-translation-zh-Hans-json.4c17fed0.chunk.js} +1 -1
  185. package/build/{id-json.3372dadc.chunk.js → id-json.0b0c9731.chunk.js} +1 -1
  186. package/build/index.html +1 -1
  187. package/build/{it-json.0e5d5fdb.chunk.js → it-json.939916bc.chunk.js} +1 -1
  188. package/build/{ja-json.14eaee93.chunk.js → ja-json.57abaacb.chunk.js} +1 -1
  189. package/build/ko-json.29633034.chunk.js +1 -0
  190. package/build/main.ca080a1e.js +2 -0
  191. package/build/{main.a5bd9650.js.LICENSE.txt → main.ca080a1e.js.LICENSE.txt} +0 -0
  192. package/build/{ms-json.a66beabc.chunk.js → ms-json.5e5d12f9.chunk.js} +1 -1
  193. package/build/nl-json.d757328d.chunk.js +1 -0
  194. package/build/{no-json.25f63ee7.chunk.js → no-json.ff46b126.chunk.js} +1 -1
  195. package/build/{pl-json.3d7884e1.chunk.js → pl-json.6bff1d54.chunk.js} +1 -1
  196. package/build/{pt-BR-json.e21cd994.chunk.js → pt-BR-json.6d1cfdb2.chunk.js} +1 -1
  197. package/build/{pt-json.21a66a61.chunk.js → pt-json.b23d9a79.chunk.js} +1 -1
  198. package/build/{ru-json.ca2b6c3c.chunk.js → ru-json.bff93229.chunk.js} +1 -1
  199. package/build/runtime~main.6f530910.js +1 -0
  200. package/build/{sk-json.7f750e28.chunk.js → sk-json.2eb1ec0d.chunk.js} +1 -1
  201. package/build/sso-settings-page.d4ab164b.chunk.js +1 -0
  202. package/build/{sv-json.3b5cc7f9.chunk.js → sv-json.8ac61ecf.chunk.js} +1 -1
  203. package/build/{th-json.694b4038.chunk.js → th-json.6e4502a3.chunk.js} +1 -1
  204. package/build/{tr-json.a842843a.chunk.js → tr-json.eaca955b.chunk.js} +1 -1
  205. package/build/uk-json.c50ad2a8.chunk.js +1 -0
  206. package/build/{upload-settings.8a380d3d.chunk.js → upload-settings.aa148b01.chunk.js} +1 -1
  207. package/build/{upload-translation-de-json.b4ff3c56.chunk.js → upload-translation-de-json.00f90715.chunk.js} +1 -1
  208. package/build/{upload-translation-dk-json.f37ae5c0.chunk.js → upload-translation-dk-json.e8c0a891.chunk.js} +1 -1
  209. package/build/{upload-translation-en-json.58d8ce44.chunk.js → upload-translation-en-json.31ea0622.chunk.js} +1 -1
  210. package/build/upload-translation-es-json.42b5c758.chunk.js +1 -0
  211. package/build/{upload-translation-fr-json.0f4b3839.chunk.js → upload-translation-fr-json.ccb4ad8b.chunk.js} +1 -1
  212. package/build/{upload-translation-he-json.4b5e48bc.chunk.js → upload-translation-he-json.5dc34ea8.chunk.js} +1 -1
  213. package/build/upload-translation-it-json.c1809a47.chunk.js +1 -0
  214. package/build/{upload-translation-ja-json.9e1193c7.chunk.js → upload-translation-ja-json.568f097e.chunk.js} +1 -1
  215. package/build/upload-translation-ko-json.da369eef.chunk.js +1 -0
  216. package/build/{upload-translation-ms-json.bfb86c2e.chunk.js → upload-translation-ms-json.be669f81.chunk.js} +1 -1
  217. package/build/{upload-translation-pl-json.e0282fa4.chunk.js → upload-translation-pl-json.67685825.chunk.js} +1 -1
  218. package/build/{upload-translation-pt-BR-json.ad6bb9f8.chunk.js → upload-translation-pt-BR-json.f7b1133d.chunk.js} +1 -1
  219. package/build/{upload-translation-ru-json.4303b6a0.chunk.js → upload-translation-ru-json.54c031aa.chunk.js} +1 -1
  220. package/build/{upload-translation-sk-json.90a0bc6c.chunk.js → upload-translation-sk-json.f643dfc2.chunk.js} +1 -1
  221. package/build/{upload-translation-th-json.cf0d62e0.chunk.js → upload-translation-th-json.88ee2090.chunk.js} +1 -1
  222. package/build/{upload-translation-uk-json.ec345d61.chunk.js → upload-translation-uk-json.1a90e73c.chunk.js} +1 -1
  223. package/build/{upload-translation-zh-Hans-json.f320fa39.chunk.js → upload-translation-zh-Hans-json.ac1dc0b9.chunk.js} +1 -1
  224. package/build/{upload-translation-zh-json.9ad30216.chunk.js → upload-translation-zh-json.164ac601.chunk.js} +1 -1
  225. package/build/{upload.1e3e2685.chunk.js → upload.1991e997.chunk.js} +1 -1
  226. package/build/{users-advanced-settings-page.bda19eae.chunk.js → users-advanced-settings-page.23ed7ee9.chunk.js} +1 -1
  227. package/build/users-email-settings-page.64dc429a.chunk.js +1 -0
  228. package/build/{users-permissions-translation-ar-json.6fe0dcf5.chunk.js → users-permissions-translation-ar-json.bdddd0d7.chunk.js} +1 -1
  229. package/build/{users-permissions-translation-cs-json.dd4bb452.chunk.js → users-permissions-translation-cs-json.7881d3ff.chunk.js} +1 -1
  230. package/build/{users-permissions-translation-de-json.1505b462.chunk.js → users-permissions-translation-de-json.8d53c619.chunk.js} +1 -1
  231. package/build/{users-permissions-translation-dk-json.6b47229f.chunk.js → users-permissions-translation-dk-json.a36b323b.chunk.js} +1 -1
  232. package/build/{users-permissions-translation-en-json.3e650c44.chunk.js → users-permissions-translation-en-json.1993655e.chunk.js} +1 -1
  233. package/build/{users-permissions-translation-es-json.768cc00e.chunk.js → users-permissions-translation-es-json.c8ef51bd.chunk.js} +1 -1
  234. package/build/users-permissions-translation-fr-json.a2172545.chunk.js +1 -0
  235. package/build/users-permissions-translation-id-json.8f17982a.chunk.js +1 -0
  236. package/build/{users-permissions-translation-it-json.baa4f859.chunk.js → users-permissions-translation-it-json.87952a24.chunk.js} +1 -1
  237. package/build/{users-permissions-translation-ja-json.3ddd4418.chunk.js → users-permissions-translation-ja-json.5915d9ef.chunk.js} +1 -1
  238. package/build/users-permissions-translation-ko-json.f1ca6cc4.chunk.js +1 -0
  239. package/build/{users-permissions-translation-ms-json.dc405667.chunk.js → users-permissions-translation-ms-json.2268324c.chunk.js} +1 -1
  240. package/build/{users-permissions-translation-nl-json.2d8e847a.chunk.js → users-permissions-translation-nl-json.4e1231dd.chunk.js} +1 -1
  241. package/build/{users-permissions-translation-pl-json.b150dfb0.chunk.js → users-permissions-translation-pl-json.107638b5.chunk.js} +1 -1
  242. package/build/{users-permissions-translation-pt-BR-json.0c494c69.chunk.js → users-permissions-translation-pt-BR-json.8dafc053.chunk.js} +1 -1
  243. package/build/{users-permissions-translation-pt-json.0fccc389.chunk.js → users-permissions-translation-pt-json.3322464f.chunk.js} +1 -1
  244. package/build/users-permissions-translation-ru-json.44dd1f10.chunk.js +1 -0
  245. package/build/{users-permissions-translation-sk-json.2602e768.chunk.js → users-permissions-translation-sk-json.fe7cc044.chunk.js} +1 -1
  246. package/build/users-permissions-translation-sv-json.e7e1684b.chunk.js +1 -0
  247. package/build/{users-permissions-translation-th-json.abe0558b.chunk.js → users-permissions-translation-th-json.bb544ee3.chunk.js} +1 -1
  248. package/build/{users-permissions-translation-tr-json.269ee593.chunk.js → users-permissions-translation-tr-json.30f3ca90.chunk.js} +1 -1
  249. package/build/{users-permissions-translation-uk-json.ffd9a4ee.chunk.js → users-permissions-translation-uk-json.634f2569.chunk.js} +1 -1
  250. package/build/{users-permissions-translation-vi-json.c2cd19d5.chunk.js → users-permissions-translation-vi-json.605d88bc.chunk.js} +1 -1
  251. package/build/{users-permissions-translation-zh-Hans-json.2d909528.chunk.js → users-permissions-translation-zh-Hans-json.85480dab.chunk.js} +1 -1
  252. package/build/{users-permissions-translation-zh-json.7f3027c5.chunk.js → users-permissions-translation-zh-json.99932731.chunk.js} +1 -1
  253. package/build/users-providers-settings-page.329f102a.chunk.js +1 -0
  254. package/build/users-roles-settings-page.e28982b6.chunk.js +1 -0
  255. package/build/{vi-json.c25f42fe.chunk.js → vi-json.e993857a.chunk.js} +1 -1
  256. package/build/webhook-edit-page.678af4e2.chunk.js +1 -0
  257. package/build/{webhook-list-page.aae66737.chunk.js → webhook-list-page.5abda9c2.chunk.js} +1 -1
  258. package/build/zh-Hans-json.fcc53388.chunk.js +1 -0
  259. package/build/zh-json.496bd6c4.chunk.js +1 -0
  260. package/ee/admin/pages/SettingsPage/pages/Roles/CreatePage/index.js +1 -1
  261. package/ee/admin/pages/SettingsPage/pages/Users/components/MagicLink/index.js +1 -1
  262. package/index.html +1 -1
  263. package/index.js +40 -1
  264. package/jest.config.front.js +10 -0
  265. package/package.json +36 -38
  266. package/server/register.js +5 -0
  267. package/server/routes/serve-admin-panel.js +59 -0
  268. package/server/strategies/api-token.js +2 -1
  269. package/webpack.alias.js +0 -6
  270. package/webpack.config.js +12 -10
  271. package/build/3226.0dc582b2.chunk.js +0 -2
  272. package/build/4261.b7b7ac00.chunk.js +0 -1
  273. package/build/4362.e71cf036.chunk.js +0 -1
  274. package/build/8447.32ee17be.chunk.js +0 -2
  275. package/build/8447.32ee17be.chunk.js.LICENSE.txt +0 -22
  276. package/build/849.fc26299c.chunk.js +0 -1
  277. package/build/9238.f112d6c9.chunk.js +0 -1
  278. package/build/Admin-authenticatedApp.0298a225.chunk.js +0 -1
  279. package/build/Admin_marketplace.201373e2.chunk.js +0 -1
  280. package/build/Admin_pluginsPage.22390055.chunk.js +0 -1
  281. package/build/Admin_profilePage.3aa61921.chunk.js +0 -1
  282. package/build/Admin_settingsPage.363ad01d.chunk.js +0 -1
  283. package/build/admin-edit-roles-page.e91bd9e5.chunk.js +0 -1
  284. package/build/admin-edit-users.bcdd2e4d.chunk.js +0 -1
  285. package/build/admin-users.a2d08780.chunk.js +0 -1
  286. package/build/api-tokens-list-page.d451255e.chunk.js +0 -1
  287. package/build/codemirror-css.7b034e03.chunk.js +0 -1
  288. package/build/codemirror-theme.4a209ed5.chunk.js +0 -1
  289. package/build/content-manager.4a449a52.chunk.js +0 -1
  290. package/build/content-type-builder-translation-dk-json.215eca36.chunk.js +0 -1
  291. package/build/content-type-builder-translation-id-json.e66f4e0a.chunk.js +0 -1
  292. package/build/content-type-builder-translation-ko-json.20ad3eac.chunk.js +0 -1
  293. package/build/content-type-builder.eeae4ee8.chunk.js +0 -1
  294. package/build/cropper-css.b71d1229.chunk.js +0 -1
  295. package/build/de-json.93987708.chunk.js +0 -1
  296. package/build/dk-json.97f8f309.chunk.js +0 -1
  297. package/build/email-settings-page.def5ceaf.chunk.js +0 -1
  298. package/build/email-translation-ar-json.536b0217.chunk.js +0 -1
  299. package/build/email-translation-cs-json.8f533c9b.chunk.js +0 -1
  300. package/build/email-translation-de-json.89f5373e.chunk.js +0 -1
  301. package/build/email-translation-dk-json.9c95cf96.chunk.js +0 -1
  302. package/build/email-translation-en-json.5ec38fe9.chunk.js +0 -1
  303. package/build/email-translation-es-json.fec78330.chunk.js +0 -1
  304. package/build/email-translation-fr-json.76afb1c3.chunk.js +0 -1
  305. package/build/email-translation-id-json.1b3e055a.chunk.js +0 -1
  306. package/build/email-translation-it-json.7273fee2.chunk.js +0 -1
  307. package/build/email-translation-ja-json.b75afc52.chunk.js +0 -1
  308. package/build/email-translation-ko-json.eb9a23cd.chunk.js +0 -1
  309. package/build/email-translation-ms-json.af7c5861.chunk.js +0 -1
  310. package/build/email-translation-nl-json.10fec023.chunk.js +0 -1
  311. package/build/email-translation-pl-json.ebda42d5.chunk.js +0 -1
  312. package/build/email-translation-pt-BR-json.338d8b7c.chunk.js +0 -1
  313. package/build/email-translation-pt-json.1cd0fedf.chunk.js +0 -1
  314. package/build/email-translation-ru-json.2c369331.chunk.js +0 -1
  315. package/build/email-translation-sk-json.ba2e026d.chunk.js +0 -1
  316. package/build/email-translation-th-json.16457076.chunk.js +0 -1
  317. package/build/email-translation-tr-json.92e0a5d9.chunk.js +0 -1
  318. package/build/email-translation-uk-json.d00dd5b1.chunk.js +0 -1
  319. package/build/email-translation-vi-json.ed425dde.chunk.js +0 -1
  320. package/build/email-translation-zh-Hans-json.e2c630b6.chunk.js +0 -1
  321. package/build/email-translation-zh-json.2a06ebac.chunk.js +0 -1
  322. package/build/en-json.6282a00f.chunk.js +0 -1
  323. package/build/fontawesome-css-all.162c8569.chunk.js +0 -1
  324. package/build/fontawesome-css.b1736497.chunk.js +0 -1
  325. package/build/fr-json.f7d484a8.chunk.js +0 -1
  326. package/build/highlight.js.3f31aed7.chunk.js +0 -1
  327. package/build/i18n-settings-page.00c74503.chunk.js +0 -1
  328. package/build/i18n-translation-en-json.17af559c.chunk.js +0 -1
  329. package/build/i18n-translation-fr-json.482f6933.chunk.js +0 -1
  330. package/build/ko-json.7203b08b.chunk.js +0 -1
  331. package/build/main.a5bd9650.js +0 -2
  332. package/build/nl-json.9c7f83db.chunk.js +0 -1
  333. package/build/runtime~main.bddfe3c6.js +0 -1
  334. package/build/sso-settings-page.bd7a8fd7.chunk.js +0 -1
  335. package/build/uk-json.3b8f967b.chunk.js +0 -1
  336. package/build/upload-translation-es-json.f9e9ffdf.chunk.js +0 -1
  337. package/build/upload-translation-it-json.fb24c332.chunk.js +0 -1
  338. package/build/users-email-settings-page.b1d1f551.chunk.js +0 -1
  339. package/build/users-permissions-translation-fr-json.12f3c930.chunk.js +0 -1
  340. package/build/users-permissions-translation-id-json.ec3deaf0.chunk.js +0 -1
  341. package/build/users-permissions-translation-ko-json.90c2d129.chunk.js +0 -1
  342. package/build/users-permissions-translation-ru-json.4389c542.chunk.js +0 -1
  343. package/build/users-permissions-translation-sv-json.438e46f7.chunk.js +0 -1
  344. package/build/users-providers-settings-page.733a51ec.chunk.js +0 -1
  345. package/build/users-roles-settings-page.0eb926e7.chunk.js +0 -1
  346. package/build/webhook-edit-page.634e50da.chunk.js +0 -1
  347. package/build/zh-Hans-json.e5041b18.chunk.js +0 -1
  348. package/build/zh-json.414d826f.chunk.js +0 -1
@@ -80,12 +80,20 @@ const LeftMenu = ({ generalSectionLinks, pluginsSectionLinks }) => {
80
80
  }
81
81
  };
82
82
 
83
+ const menuTitle = formatMessage({
84
+ id: 'app.components.LeftMenu.navbrand.title',
85
+ defaultMessage: 'Strapi Dashboard',
86
+ });
87
+
83
88
  return (
84
89
  <MainNav condensed={condensed}>
85
90
  <NavBrand
86
- workplace="Workplace"
87
- title="Strapi Dashboard"
88
- icon={<img src={menuLogo} alt="Strapi Dashboard" />}
91
+ workplace={formatMessage({
92
+ id: 'app.components.LeftMenu.navbrand.workplace',
93
+ defaultMessage: 'Workplace',
94
+ })}
95
+ title={menuTitle}
96
+ icon={<img src={menuLogo} alt={menuTitle} />}
89
97
  />
90
98
 
91
99
  <Divider />
@@ -149,7 +157,7 @@ const LeftMenu = ({ generalSectionLinks, pluginsSectionLinks }) => {
149
157
  >
150
158
  <FocusTrap onEscape={handleToggleUserLinks}>
151
159
  <Stack size={0}>
152
- <LinkUser onClick={handleToggleUserLinks} to="/me">
160
+ <LinkUser tabIndex={0} onClick={handleToggleUserLinks} to="/me">
153
161
  <Typography>
154
162
  {formatMessage({
155
163
  id: 'app.components.LeftMenu.profile',
@@ -157,7 +165,7 @@ const LeftMenu = ({ generalSectionLinks, pluginsSectionLinks }) => {
157
165
  })}
158
166
  </Typography>
159
167
  </LinkUser>
160
- <LinkUser onClick={handleLogout} logout="logout" to="/auth/login">
168
+ <LinkUser tabIndex={0} onClick={handleLogout} logout="logout" to="/auth/login">
161
169
  <Typography textColor="danger600">
162
170
  {formatMessage({
163
171
  id: 'app.components.LeftMenu.logout',
@@ -40,18 +40,18 @@ const Notification = ({ dispatch, notification }) => {
40
40
  variant = 'default';
41
41
  alertTitle = formatMessage({
42
42
  id: 'notification.default.title',
43
- defaultMessage: 'Information Alert:',
43
+ defaultMessage: 'Information:',
44
44
  });
45
45
  } else if (type === 'warning') {
46
46
  alertTitle = formatMessage({
47
47
  id: 'notification.warning.title',
48
- defaultMessage: 'Warning Alert:',
48
+ defaultMessage: 'Warning:',
49
49
  });
50
50
  variant = 'danger';
51
51
  } else {
52
52
  alertTitle = formatMessage({
53
53
  id: 'notification.success.title',
54
- defaultMessage: 'Success Alert:',
54
+ defaultMessage: 'Success:',
55
55
  });
56
56
  variant = 'success';
57
57
  }
@@ -200,10 +200,10 @@ const CollectionTypeFormWrapper = ({ allLayoutData, children, slug, id, origin }
200
200
 
201
201
  const displayErrors = useCallback(
202
202
  err => {
203
- const errorPayload = err.response.payload;
203
+ const errorPayload = err.response.data;
204
204
  console.error(errorPayload);
205
205
 
206
- let errorMessage = get(errorPayload, ['message'], 'Bad Request');
206
+ let errorMessage = get(errorPayload, ['error', 'message'], 'Bad Request');
207
207
 
208
208
  // TODO handle errors correctly when back-end ready
209
209
  if (Array.isArray(errorMessage)) {
@@ -57,13 +57,10 @@ const ComponentInitializer = ({ error, isReadOnly, onClick }) => {
57
57
  </Box>
58
58
  {error?.id && (
59
59
  <Typography textColor="danger600" variant="pi">
60
- {formatMessage(
61
- {
62
- id: error.id,
63
- defaultMessage: error.defaultMessage,
64
- },
65
- error.values
66
- )}
60
+ {formatMessage({
61
+ id: error.id,
62
+ defaultMessage: error.id,
63
+ })}
67
64
  </Typography>
68
65
  )}
69
66
  </>
@@ -78,8 +75,6 @@ ComponentInitializer.defaultProps = {
78
75
  ComponentInitializer.propTypes = {
79
76
  error: PropTypes.shape({
80
77
  id: PropTypes.string.isRequired,
81
- defaultMessage: PropTypes.string.isRequired,
82
- values: PropTypes.object,
83
78
  }),
84
79
  isReadOnly: PropTypes.bool,
85
80
  onClick: PropTypes.func.isRequired,
@@ -54,7 +54,7 @@ const CustomDragLayer = () => {
54
54
  <LayoutDndProvider>
55
55
  <div style={layerStyles}>
56
56
  <div style={getItemStyles(initialOffset, currentOffset, mouseOffset)} className="col-md-2">
57
- {[ItemTypes.EDIT_RELATION, ItemTypes.EDIT_FIELD].includes(itemType) && (
57
+ {[ItemTypes.EDIT_RELATION, ItemTypes.EDIT_FIELD, ItemTypes.FIELD].includes(itemType) && (
58
58
  <CardPreview labelField={item.labelField} />
59
59
  )}
60
60
  {itemType === ItemTypes.COMPONENT && (
@@ -1,6 +1,7 @@
1
1
  import PropTypes from 'prop-types';
2
2
  import { useIntl } from 'react-intl';
3
3
  import toString from 'lodash/toString';
4
+ import { getNumberOfDecimals } from './utils/getNumberOfDecimals';
4
5
 
5
6
  const CellValue = ({ type, value }) => {
6
7
  const { formatDate, formatTime, formatNumber } = useIntl();
@@ -27,8 +28,17 @@ const CellValue = ({ type, value }) => {
27
28
  });
28
29
  }
29
30
 
30
- if (['float', 'integer', 'biginteger', 'decimal'].includes(type)) {
31
- formattedValue = formatNumber(value);
31
+ if (['float', 'decimal'].includes(type)) {
32
+ const numberOfDecimals = getNumberOfDecimals(value);
33
+
34
+ formattedValue = formatNumber(value, {
35
+ minimumFractionDigits: numberOfDecimals,
36
+ maximumFractionDigits: numberOfDecimals,
37
+ });
38
+ }
39
+
40
+ if (['integer', 'biginteger'].includes(type)) {
41
+ formattedValue = formatNumber(value, { maximumFractionDigits: 0 });
32
42
  }
33
43
 
34
44
  return toString(formattedValue);
@@ -0,0 +1,8 @@
1
+ export const getNumberOfDecimals = value => {
2
+ if (value % 1 !== 0) {
3
+ // value has decimals
4
+ return value.toString().split('.')[1].length;
5
+ }
6
+
7
+ return 0;
8
+ };
@@ -16,6 +16,7 @@ const DynamicTable = ({
16
16
  canCreate,
17
17
  canDelete,
18
18
  contentTypeName,
19
+ action,
19
20
  isBulkable,
20
21
  isLoading,
21
22
  onConfirmDelete,
@@ -77,6 +78,7 @@ const DynamicTable = ({
77
78
  <Table
78
79
  components={{ ConfirmDialogDelete, ConfirmDialogDeleteAll }}
79
80
  contentType={contentTypeName}
81
+ action={action}
80
82
  isLoading={isLoading}
81
83
  headers={tableHeaders}
82
84
  onConfirmDelete={onConfirmDelete}
@@ -98,10 +100,15 @@ const DynamicTable = ({
98
100
  );
99
101
  };
100
102
 
103
+ DynamicTable.defaultProps = {
104
+ action: undefined,
105
+ };
106
+
101
107
  DynamicTable.propTypes = {
102
108
  canCreate: PropTypes.bool.isRequired,
103
109
  canDelete: PropTypes.bool.isRequired,
104
110
  contentTypeName: PropTypes.string.isRequired,
111
+ action: PropTypes.node,
105
112
  isBulkable: PropTypes.bool.isRequired,
106
113
  isLoading: PropTypes.bool.isRequired,
107
114
  layout: PropTypes.exact({
@@ -17,7 +17,7 @@ const StyledBox = styled(Box)`
17
17
  border-radius: ${pxToRem(26)};
18
18
  `;
19
19
 
20
- const DzLabel = ({ label, labelAction, name, numberOfComponents, required }) => {
20
+ const DzLabel = ({ label, labelAction, name, numberOfComponents, required, intlDescription }) => {
21
21
  const { formatMessage } = useIntl();
22
22
  const intlLabel = formatMessage({ id: label || name, defaultMessage: label || name });
23
23
 
@@ -33,12 +33,24 @@ const DzLabel = ({ label, labelAction, name, numberOfComponents, required }) =>
33
33
  shadow="filterShadow"
34
34
  color="neutral500"
35
35
  >
36
- <Flex>
37
- <Typography fontSize={0} lineHeight={0} textColor="neutral600" fontWeight="bold">
38
- {intlLabel}&nbsp;({numberOfComponents})
39
- </Typography>
40
- {required && <Typography textColor="danger600">*</Typography>}
41
- {labelAction && <Box paddingLeft={1}>{labelAction}</Box>}
36
+ <Flex direction="column" justifyContent="center">
37
+ <Flex maxWidth={pxToRem(356)}>
38
+ <Typography variant="pi" textColor="neutral600" fontWeight="bold" ellipsis>
39
+ {intlLabel}&nbsp;
40
+ </Typography>
41
+ <Typography variant="pi" textColor="neutral600" fontWeight="bold">
42
+ ({numberOfComponents})
43
+ </Typography>
44
+ {required && <Typography textColor="danger600">*</Typography>}
45
+ {labelAction && <Box paddingLeft={1}>{labelAction}</Box>}
46
+ </Flex>
47
+ {intlDescription && (
48
+ <Box paddingTop={1} maxWidth={pxToRem(356)}>
49
+ <Typography variant="pi" textColor="neutral600" ellipsis>
50
+ {formatMessage(intlDescription)}
51
+ </Typography>
52
+ </Box>
53
+ )}
42
54
  </Flex>
43
55
  </StyledBox>
44
56
  </Box>
@@ -47,12 +59,17 @@ const DzLabel = ({ label, labelAction, name, numberOfComponents, required }) =>
47
59
  };
48
60
 
49
61
  DzLabel.defaultProps = {
62
+ intlDescription: undefined,
50
63
  label: '',
51
64
  labelAction: undefined,
52
65
  required: false,
53
66
  };
54
67
 
55
68
  DzLabel.propTypes = {
69
+ intlDescription: PropTypes.shape({
70
+ id: PropTypes.string.isRequired,
71
+ defaultMessage: PropTypes.string.isRequired,
72
+ }),
56
73
  label: PropTypes.string,
57
74
  labelAction: PropTypes.element,
58
75
  name: PropTypes.string.isRequired,
@@ -1,4 +1,4 @@
1
- import React, { memo, useCallback, useMemo, useState } from 'react';
1
+ import React, { memo, useCallback, useMemo, useState, useEffect } from 'react';
2
2
  import get from 'lodash/get';
3
3
  import isEqual from 'react-fast-compare';
4
4
  import PropTypes from 'prop-types';
@@ -37,11 +37,36 @@ const DynamicZone = ({
37
37
  }) => {
38
38
  const toggleNotification = useNotification();
39
39
  const [isOpen, setIsOpen] = useState(false);
40
+ const [shouldOpenAddedComponent, setShouldOpenAddedComponent] = useState(false);
40
41
  const dynamicDisplayedComponentsLength = dynamicDisplayedComponents.length;
42
+ const intlDescription = metadatas.description
43
+ ? { id: metadatas.description, defaultMessage: metadatas.description }
44
+ : null;
45
+
41
46
  const [componentCollapses, setComponentsCollapses] = useState(
42
47
  createCollapses(dynamicDisplayedComponentsLength)
43
48
  );
44
49
 
50
+ useEffect(() => {
51
+ setComponentsCollapses(createCollapses(dynamicDisplayedComponentsLength));
52
+ }, [dynamicDisplayedComponentsLength]);
53
+
54
+ useEffect(() => {
55
+ if (shouldOpenAddedComponent) {
56
+ setComponentsCollapses(prev =>
57
+ prev.map((collapse, index) => {
58
+ if (index === prev.length - 1) {
59
+ return { ...collapse, isOpen: true };
60
+ }
61
+
62
+ return collapse;
63
+ })
64
+ );
65
+
66
+ setShouldOpenAddedComponent(false);
67
+ }
68
+ }, [shouldOpenAddedComponent]);
69
+
45
70
  // We cannot use the default props here
46
71
  const { max = Infinity, min = -Infinity } = fieldSchema;
47
72
  const dynamicZoneErrors = useMemo(() => {
@@ -68,7 +93,7 @@ const DynamicZone = ({
68
93
  setIsOpen(false);
69
94
 
70
95
  addComponentToDynamicZone(name, componentUid, hasError);
71
- setComponentsCollapses(prev => [...prev, { isOpen: true }]);
96
+ setShouldOpenAddedComponent(true);
72
97
  },
73
98
  [addComponentToDynamicZone, hasError, name]
74
99
  );
@@ -132,18 +157,12 @@ const DynamicZone = ({
132
157
 
133
158
  const handleRemoveComponent = (name, currentIndex) => {
134
159
  removeComponentFromDynamicZone(name, currentIndex);
135
-
136
- setComponentsCollapses(prev => prev.filter((_, index) => index !== currentIndex));
137
160
  };
138
161
 
139
162
  if (!isFieldAllowed && isCreatingEntry) {
140
163
  return (
141
164
  <NotAllowedInput
142
- description={
143
- metadatas.description
144
- ? { id: metadatas.description, defaultMessage: metadatas.description }
145
- : null
146
- }
165
+ description={intlDescription}
147
166
  intlLabel={{ id: metadatas.label, defaultMessage: metadatas.label }}
148
167
  labelAction={labelAction}
149
168
  name={name}
@@ -154,11 +173,7 @@ const DynamicZone = ({
154
173
  if (!isFieldAllowed && !isFieldReadable && !isCreatingEntry) {
155
174
  return (
156
175
  <NotAllowedInput
157
- description={
158
- metadatas.description
159
- ? { id: metadatas.description, defaultMessage: metadatas.description }
160
- : null
161
- }
176
+ description={intlDescription}
162
177
  intlLabel={{ id: metadatas.label, defaultMessage: metadatas.label }}
163
178
  labelAction={labelAction}
164
179
  name={name}
@@ -171,6 +186,7 @@ const DynamicZone = ({
171
186
  {dynamicDisplayedComponentsLength > 0 && (
172
187
  <Box>
173
188
  <DzLabel
189
+ intlDescription={intlDescription}
174
190
  label={metadatas.label}
175
191
  labelAction={labelAction}
176
192
  name={name}
@@ -183,7 +199,7 @@ const DynamicZone = ({
183
199
  dynamicDisplayedComponentsLength > 0 &&
184
200
  index < dynamicDisplayedComponentsLength - 1;
185
201
  const showUpIcon = isFieldAllowed && dynamicDisplayedComponentsLength > 0 && index > 0;
186
- const isOpen = componentCollapses[index].isOpen;
202
+ const isOpen = componentCollapses[index]?.isOpen || false;
187
203
 
188
204
  return (
189
205
  <Component
@@ -338,7 +338,10 @@ const createYupSchemaAttribute = (type, validations, options) => {
338
338
  break;
339
339
  }
340
340
  case 'regex':
341
- schema = schema.matches(new RegExp(validationValue), errorsTrads.regex);
341
+ schema = schema.matches(new RegExp(validationValue), {
342
+ message: errorsTrads.regex,
343
+ excludeEmptyString: !validations.required,
344
+ });
342
345
  break;
343
346
  case 'lowercase':
344
347
  if (['text', 'textarea', 'email', 'string'].includes(type)) {
@@ -32,6 +32,7 @@ const InputUID = ({
32
32
  onChange,
33
33
  value,
34
34
  placeholder,
35
+ required,
35
36
  }) => {
36
37
  const { modifiedData, initialData, layout } = useCMEditViewDataManager();
37
38
  const [isLoading, setIsLoading] = useState(false);
@@ -244,6 +245,7 @@ const InputUID = ({
244
245
  onChange={handleChange}
245
246
  placeholder={formattedPlaceholder}
246
247
  value={value || ''}
248
+ required={required}
247
249
  />
248
250
  );
249
251
  };
@@ -275,6 +277,7 @@ InputUID.propTypes = {
275
277
  defaultMessage: PropTypes.string.isRequired,
276
278
  values: PropTypes.object,
277
279
  }),
280
+ required: PropTypes.bool,
278
281
  };
279
282
 
280
283
  InputUID.defaultProps = {
@@ -284,6 +287,7 @@ InputUID.defaultProps = {
284
287
  labelAction: undefined,
285
288
  placeholder: undefined,
286
289
  value: '',
290
+ required: false,
287
291
  };
288
292
 
289
293
  export default InputUID;
@@ -47,6 +47,10 @@ const Wrapper = styled.div`
47
47
  font-weight: 800;
48
48
  }
49
49
 
50
+ em {
51
+ font-style: italic;
52
+ }
53
+
50
54
  blockquote {
51
55
  margin-top: 41px;
52
56
  margin-bottom: 34px;
@@ -92,7 +92,7 @@ const AccordionGroupCustom = ({ children, footer, label, labelAction, error }) =
92
92
  {error && (
93
93
  <Box paddingTop={1}>
94
94
  <Typography variant="pi" textColor="danger600">
95
- {formatMessage({ id: error.id, defaultMessage: error.defaultMessage }, error.values)}
95
+ {formatMessage({ id: error.id, defaultMessage: error.id })}
96
96
  </Typography>
97
97
  </Box>
98
98
  )}
@@ -111,8 +111,6 @@ AccordionGroupCustom.propTypes = {
111
111
  children: PropTypes.node.isRequired,
112
112
  error: PropTypes.shape({
113
113
  id: PropTypes.string.isRequired,
114
- defaultMessage: PropTypes.string.isRequired,
115
- values: PropTypes.object,
116
114
  }),
117
115
  footer: PropTypes.node,
118
116
  label: PropTypes.string,
@@ -20,10 +20,6 @@ export const CustomIconButton = styled(IconButton)`
20
20
  }
21
21
  `;
22
22
 
23
- export const DragHandleWrapper = styled(CustomIconButton)`
24
- cursor: move;
25
- `;
26
-
27
23
  export const CustomIconButtonSibling = styled(IconButton)`
28
24
  background-color: transparent;
29
25
 
@@ -3,12 +3,14 @@ import React, { memo, useEffect, useRef, useState } from 'react';
3
3
  import PropTypes from 'prop-types';
4
4
  import { useDrag, useDrop } from 'react-dnd';
5
5
  import { getEmptyImage } from 'react-dnd-html5-backend';
6
+ import styled from 'styled-components';
6
7
  import { useIntl } from 'react-intl';
7
8
  import toString from 'lodash/toString';
8
9
  import { Accordion, AccordionToggle, AccordionContent } from '@strapi/design-system/Accordion';
9
10
  import { Grid, GridItem } from '@strapi/design-system/Grid';
10
11
  import { Stack } from '@strapi/design-system/Stack';
11
12
  import { Box } from '@strapi/design-system/Box';
13
+ import { Tooltip } from '@strapi/design-system/Tooltip';
12
14
  import Trash from '@strapi/icons/Trash';
13
15
  import Drag from '@strapi/icons/Drag';
14
16
  import ItemTypes from '../../../utils/ItemTypes';
@@ -17,9 +19,23 @@ import Inputs from '../../Inputs';
17
19
  import FieldComponent from '../../FieldComponent';
18
20
  import Preview from './Preview';
19
21
  import DraggingSibling from './DraggingSibling';
20
- import { CustomIconButton, DragHandleWrapper } from './IconButtonCustoms';
22
+ import { CustomIconButton } from './IconButtonCustoms';
21
23
  import { connect, select } from './utils';
22
24
 
25
+ const DragButton = styled.span`
26
+ display: flex;
27
+ align-items: center;
28
+ height: ${({ theme }) => theme.spaces[7]};
29
+
30
+ padding: 0 ${({ theme }) => theme.spaces[3]};
31
+ cursor: all-scroll;
32
+
33
+ svg {
34
+ width: ${12 / 16}rem;
35
+ height: ${12 / 16}rem;
36
+ }
37
+ `;
38
+
23
39
  /* eslint-disable react/no-array-index-key */
24
40
 
25
41
  // Issues:
@@ -40,7 +56,7 @@ const DraggedItem = ({
40
56
  // Retrieved from the select function
41
57
  moveComponentField,
42
58
  removeRepeatableField,
43
- setIsDraggingSiblig,
59
+ setIsDraggingSibling,
44
60
  triggerFormValidation,
45
61
  // checkFormErrors,
46
62
  displayedValue,
@@ -125,7 +141,7 @@ const DraggedItem = ({
125
141
  end: () => {
126
142
  // Update the errors
127
143
  triggerFormValidation();
128
- setIsDraggingSiblig(false);
144
+ setIsDraggingSibling(false);
129
145
  },
130
146
  collect: monitor => ({
131
147
  isDragging: monitor.isDragging(),
@@ -138,9 +154,9 @@ const DraggedItem = ({
138
154
 
139
155
  useEffect(() => {
140
156
  if (isDragging) {
141
- setIsDraggingSiblig(true);
157
+ setIsDraggingSibling(true);
142
158
  }
143
- }, [isDragging, setIsDraggingSiblig]);
159
+ }, [isDragging, setIsDraggingSibling]);
144
160
 
145
161
  // Effect in order to force a rerender after reordering the components
146
162
  // Since we are removing the Accordion when doing the DnD we are losing the dragRef, therefore the replaced element cannot be dragged
@@ -195,16 +211,22 @@ const DraggedItem = ({
195
211
  })}
196
212
  icon={<Trash />}
197
213
  />
198
- <DragHandleWrapper
199
- expanded={isOpen}
200
- icon={<Drag />}
201
- label={formatMessage({
214
+ {/* react-dnd is broken in firefox with our IconButton, maybe a ref issue */}
215
+ <Tooltip
216
+ description={formatMessage({
202
217
  id: getTrad('components.DragHandle-label'),
203
218
  defaultMessage: 'Drag',
204
219
  })}
205
- noBorder
206
- ref={refs.dragRef}
207
- />
220
+ >
221
+ <DragButton
222
+ role="button"
223
+ tabIndex={-1}
224
+ ref={refs.dragRef}
225
+ onClick={e => e.stopPropagation()}
226
+ >
227
+ <Drag />
228
+ </DragButton>
229
+ </Tooltip>
208
230
  </Stack>
209
231
  )
210
232
  }
@@ -268,7 +290,7 @@ const DraggedItem = ({
268
290
  DraggedItem.defaultProps = {
269
291
  isDraggingSibling: false,
270
292
  isOpen: false,
271
- setIsDraggingSiblig: () => {},
293
+ setIsDraggingSibling: () => {},
272
294
  toggleCollapses: () => {},
273
295
  };
274
296
 
@@ -284,7 +306,7 @@ DraggedItem.propTypes = {
284
306
  toggleCollapses: PropTypes.func,
285
307
  moveComponentField: PropTypes.func.isRequired,
286
308
  removeRepeatableField: PropTypes.func.isRequired,
287
- setIsDraggingSiblig: PropTypes.func,
309
+ setIsDraggingSibling: PropTypes.func,
288
310
  triggerFormValidation: PropTypes.func.isRequired,
289
311
  // checkFormErrors: PropTypes.func.isRequired,
290
312
  displayedValue: PropTypes.string.isRequired,
@@ -47,7 +47,7 @@ const RepeatableComponent = ({
47
47
  const toggleNotification = useNotification();
48
48
  const { formatMessage } = useIntl();
49
49
  const [collapseToOpen, setCollapseToOpen] = useState('');
50
- const [isDraggingSibling, setIsDraggingSiblig] = useState(false);
50
+ const [isDraggingSibling, setIsDraggingSibling] = useState(false);
51
51
  const [, drop] = useDrop({ accept: ItemTypes.COMPONENT });
52
52
  const { getComponentLayout } = useContentTypeLayout();
53
53
  const componentLayoutData = useMemo(() => getComponentLayout(componentUid), [
@@ -173,7 +173,7 @@ const RepeatableComponent = ({
173
173
  }}
174
174
  parentName={name}
175
175
  schema={componentLayoutData}
176
- setIsDraggingSiblig={setIsDraggingSiblig}
176
+ setIsDraggingSibling={setIsDraggingSibling}
177
177
  toggleCollapses={toggleCollapses}
178
178
  />
179
179
  );